<?php

/**
 * Cette classe permet d'afficher les réponses
 */
class Operations extends View {
	
	/**
	 * Cette fonction permet de retourner un lecteur mp3 en fonction d'un message.
	 * Le flux audio est récupérer depuis http://translate.google.com/translate_tts
	 * se site accepte que les messages de moisn de 100 caractères.
	 * Donc le message est découper tous les 100 caractères et les flux audio sont fusionner en un seul 
	 * @param $message
	 * @param $numResult si == 0 l'autostart est activé
	 */
	public function mp3($message, $numResult) {
		$lang = Language::getLang();
		$message = html_entity_decode ( $message, ENT_QUOTES );
		
		// Si le messaage est inférieure à 100 caractères
		if (strlen ( $message ) < 100) {
			$url = urlencode ( 'http://translate.google.com/translate_tts?tl=' . $lang . '&q=' . $message );
		} 
		// Pemet de découper le message tous les 100 caractères et fusionne les fichiers mp3
		else {
			$joinedFileName = dirname ( __FILE__ ) . '\..\..\mp3\\' . session_id () . '_result_' . $numResult . '.mp3';
			
			$mp3 = new mp3 ();
			$mp3->save ( $joinedFileName );
			
			// Permet de découper le message
			$words = explode ( ' ', $message );
			$sentanceList = array ();
			$index = - 1;
			foreach ( $words as $word ) {
				if (isset ( $sentanceList [$index] ) && strlen ( $sentanceList [$index] . ' ' . $word ) < 100) {
					$sentanceList [$index] = $sentanceList [$index] . ' ' . $word;
				} else {
					$index ++;
					$sentanceList [$index] = $word;
				}
			}
			
			// Permet de récuperer les flux mp3 en fonctiond du message découper
			for($i = 0; $i < count ( $sentanceList ); $i ++) {
				$msg = $sentanceList [$i];
				$mp3_data = Moteur::http_fetch_url ( 'http://translate.google.com/translate_tts?tl=' . $lang . '&q=' . self::replaceMsg ( $msg ) );
				$filepath = dirname ( __FILE__ ) . '\..\..\mp3\\' . session_id () . '_result_' . $numResult . '_part' . $i . '.mp3';
				
				file_put_contents ( $filepath, $mp3_data );
				$path [] = $filepath;
			}
			// Joint les flux mp3
			$mp3->multiJoin ( $joinedFileName, $path );
			$url = WEBROOT . '/mp3/' . session_id () . '_result_' . $numResult . '.mp3';
			// Supprime les fichiers mp3 temporaires
			foreach ( $path as $mp3_file ) {
				unlink ( $mp3_file );
			}
		}
		// Creer le lecteur en fonction du flux mp3 
		$autostart_parameter = ($numResult == 0) ? 1 : 0;
		$res = '<object type="application/x-shockwave-flash" data="' . TEMPLATE_ROOT . '/Swf/dewplayer-mini.swf" width="160" height="20" id="dewplayer" name="dewplayer">
				<param name="wmode" value="transparent" /><param name="movie" value="' . TEMPLATE_ROOT . '/Swf/dewplayer-mini.swf" />
		 		<param name="flashvars" value="mp3=' . $url . '&amp;autostart=' . $autostart_parameter . '" /> </object>';
		return $res;
	}
	
	/**
	 * Permet d'afficher les résulats de la recherche
	 * @see View::displayView()
	 */
	public function displayView() {
		$lang = Language::getLang();
		$res = '<div id="resultDiv">';
		$res .= '<center>';
		// Si il y a une erreur
		if (controller::getError ( 'error_result' ) != null) {
			$error = controller::getError ( 'error_result' );
			$error = Language::getLang()== 'fr' ? $error : Google_Translate_API::translate($error, 'fr', $lang);  
			$res .= '<div class="sorry">' . $error . '</div>';
			// Lecteur mp3
			$res .= $this->mp3 ( $error , 0 );
		} else {
			$resultats = Controller::getSessionVariable ( 'resultats' );
			if ($resultats != null) {
				// Permet de récuperer les images google en fonction du titre
				$titre = $resultats[0]['infos']['titre'];
				$res .= '<script type="text/javascript"> LoadGImage("'.$titre.'");</script>';
				foreach ( $resultats as $resultNum => $resultat ) {
					$res .= '<div class="result">';
					// Images
					$titre = $resultat ['images'] ['titre'];
					$res .= '<div class="result_image"><a><img alt="' . $titre . '" src="' . $resultat ['images'] ['img'] . '" </img></a>';
					$res .= '<h2>' . $titre . '</h2>';
					$res .= '</div>';
					// Informations, traduction dans la langue
					$titre = Google_Translate_API::translate ( $resultat ['infos'] ['titre'], 'en', $lang );
					$detail = Google_Translate_API::translate ( $resultat ['infos'] ['detail'], 'en', $lang );
					
					$res .= '<div class="result_titre"><a>' . $titre . '</a></div>';
					$res .= '<div class="result_detail"><a>' . $detail . '</a></div>';
					// Lecteur mp3
					$msg = $detail == '' ? $titre : $detail;
					$res .= $this->mp3 ( $msg, $resultNum );
					// Liens
					if (isset ( $resultat ['liens'] )) {
						foreach ( $resultat ['liens'] as $lien ) {
							$res .= '<div class="result_lien"><a  href="' . $lien ['href'] . '">' . $lien ['titre'] . '</a></div>';
							if (isset ( $lien ['wiki'] )) {
								$wiki = '<div>' . $lien ['wiki'] . '</div>';
							}
						}
					}
					
					$res .= isset ( $wiki ) ? '<br/>' . $wiki : '';
					$res .= '</div>';
				}
				// Erreur trop de résulats 
				if (controller::getError ( 'error_most_results' ) != null) {
					$error = controller::getError ( 'error_most_results' );
					$error = Language::getLang()== 'fr' ? $error : Google_Translate_API::translate($error, 'fr', $lang);  
					$res .= '<div class="sorry">' . $error . '</div>';
				}
				
				Controller::destroySessionVariable ( 'resultats' );
			}
		}
		$res .= '</center>';
		$res .= '</div>';
		return $res;
	}
	
	/**
	 * Permet de convertir le message du flux audio 
	 * au format adéquat
	 * Retourne le message au bon format
	 * @param  $str
	 */
	private function replaceMsg($str) {
		$str = str_replace ( " ", "+", $str );
		$str = str_replace ( ",", "%2C", $str );
		$str = str_replace ( "&", "%26", $str );
		
		return $str;
	}
}

?>